home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / telecomm / fnordadl / fn132src.zoo / citutil / lchange.c < prev    next >
C/C++ Source or Header  |  1991-09-02  |  3KB  |  130 lines

  1. /*
  2.  * lchange.c -- change the # of entries in the citadel log
  3.  *
  4.  * 88Jan03 orc    Modified to allow expansion of the userlog
  5.  * 87Dec31 orc    Created
  6.  */
  7.  
  8. #include "ctdl.h"
  9. #include "log.h"
  10. #include "config.h"
  11. #include "citlib.h"
  12.  
  13. int oldlog, newlog, newlogsize, oldlogsize;
  14. char *program = "lchange";
  15.  
  16. /* Get a yes/no response from console */
  17. int
  18. getyesno(void)
  19. {
  20.     int c;
  21.  
  22.     while (1) {
  23.     c = toupper(getch());
  24.     if (c == 'Y' || c == 'N')
  25.         break;
  26.     }
  27.     putchar(c);
  28.     putchar('\n');
  29.     if (c == 'N')
  30.     return NO;
  31.     else
  32.     return YES;
  33. }
  34.  
  35. int
  36. main(int argc, char **argv)
  37. {
  38.     int i, p;
  39.     PATHBUF logfile;
  40.     PATHBUF newfile;
  41.  
  42.     setbuf(stdout, NULL);
  43.     printf("%s for Fnordadel V%s\n", program, VERSION);
  44.  
  45.     if (argc == 2)
  46.     newlogsize = atoi(argv[1]);
  47.     else {
  48.     fprintf(stderr,"usage: %s <new log size>\n", program);
  49.     if (fromdesk())
  50.         hitkey();
  51.     exit(1);
  52.     }
  53.  
  54.     if ((newlogsize > MAXLOGSIZE) || (newlogsize < MINLOGSIZE))
  55.     crashout("new logsize must be between %d and %d", MINLOGSIZE,
  56.         MAXLOGSIZE);
  57.     else if (newlogsize > SANELOGSIZE) {
  58.     printf("Do you really want %d log entries? (y/n) ", newlogsize);
  59.     if (!getyesno())
  60.         crashout("Okay");
  61.     }
  62.     else if (newlogsize == cfg.logsize)
  63.     crashout("logsize is already %d", newlogsize);
  64.  
  65.     if (readSysTab(YES) && makelock(&p)) {
  66.     initlogBuf(&logBuf);
  67.  
  68.     ctdlfile(logfile, cfg.sysdir, "ctdllog.sys");
  69.     ctdlfile(newfile, cfg.sysdir, "ctdllog.new");
  70.  
  71.     oldlog = dopen(logfile,O_RDONLY);
  72.     if (oldlog < 0) {
  73.         writeSysTab();
  74.         wipelock(&p);
  75.         crashout("cannot open %s", logfile);
  76.     }
  77.     dunlink(newfile);
  78.     newlog = dcreat(newfile);
  79.     if (newlog < 0) {
  80.         writeSysTab();
  81.         wipelock(&p);
  82.         crashout("cannot create %s", newfile);
  83.     }
  84.     oldlogsize = cfg.logsize;
  85.     cfg.logsize = newlogsize;
  86.  
  87.     if (cfg.logsize > oldlogsize) {
  88.         logTab = (struct lTable *) realloc(logTab, sizeof(*logTab) * 
  89.         cfg.logsize);
  90.         if (!logTab) {
  91.         writeSysTab();
  92.         wipelock(&p);
  93.         crashout("out of memory");
  94.         }
  95.         for (i = oldlogsize; i < cfg.logsize; i++) {
  96.         logTab[i].ltpwhash =
  97.         logTab[i].ltnmhash = logTab[i].ltnewest = 0;
  98.         }
  99.     }
  100.     for (i = 0; i < cfg.logsize; i++) {
  101.         if (i < oldlogsize) {
  102.         getlog(&logBuf, logTab[i].ltlogSlot, oldlog);
  103.         if readbit(logBuf,uINUSE)
  104.             printf("log %3d: %s\n", i, logBuf.lbname);
  105.         }
  106.         else {
  107.         memset(&logBuf, 0, LB_SIZE);
  108.         memset(logBuf.lbgen, 0, GEN_BULK);
  109.         memset(logBuf.lbmail, 0, MAIL_BULK);
  110.         printf("New log %3d\r",i);
  111.         }
  112.         putlog(&logBuf, logTab[i].ltlogSlot = i, newlog);
  113.     }
  114.     if (cfg.logsize > oldlogsize)
  115.         putchar('\n');
  116.     dclose(newlog);
  117.     dclose(oldlog);
  118.     dunlink(logfile);
  119.     drename(newfile,logfile);
  120.     fprintf(stderr, "New log size is %d; \
  121. Don't forget to modify ctdlcnfg.sys!\n", cfg.logsize);
  122.     writeSysTab();
  123.     wipelock(&p);
  124.  
  125.     killlogBuf(&logBuf);
  126.     }
  127.     if (fromdesk())
  128.     hitkey();
  129. }
  130.